package code15Lambda表达式.周末练习;

import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;

/**
 * @author 黄衡熙
 * @version 1.0
 */
/*
 * 1.找出所有员工,并按工资升序排序,打印出员工姓名与工资
 * 2.找出所有研发部员工,按照工资降序排序,打印出员工姓名、工资、部门
 * 3.找出员工都属于哪些部门
 * 4.输出最高工资的员工信息
 * 5.输出最低工资的员工信息
 * 6.输出员工的平均工资
 * 7.在每一个员工姓名前加前缀itany_
 * */

public class Test {
    private static List<Emp> emps = Emp.getData();

    public static void main(String[] args) {
        //test1();
        //test2();
        test3();
        //test4();
        //test5();
        //test6();
        //test7();
    }

    //找出所有员工,并按工资升序排序,打印出员工姓名与工资
    public static void test1() {
        /*emps.stream()
                .sorted((e1, e2) -> e1.getSalary().compareTo(e2.getSalary()))
                .forEach(emp -> System.out.println("姓名：" + emp.getName() + "，工资：" + emp.getSalary()));*/
        emps.stream()
                .sorted((e1, e2) -> (int) (e1.getSalary() - e2.getSalary()))
                .forEach(e -> System.out.println("姓名:" + e.getName() + ",工资:" + e.getSalary()));
    }

    //找出所有研发部员工,按照工资降序排序,打印出员工姓名、工资、部门
    public static void test2() {
       /* emps.stream()
                .filter(e -> "研发部".equals(e.getDept().getName()))
                .sorted((e1, e2) -> e2.getSalary().compareTo(e1.getSalary()))
                .forEach(emp -> System.out.println("姓名：" + emp.getName() + "，工资：" + emp.getSalary() + "部门:" + emp.getDept().getName()));
*/
        emps.stream()
                .filter(e -> "研发部".equals(e.getDept().getName()))
                .sorted((e1, e2) -> (int) (e2.getSalary() - e1.getSalary()))
                .forEach(e -> System.out.println("姓名:" + e.getName() + ",工资:" + e.getSalary() + ",所属部门:" + e.getDept().getName()));
    }

    //3.找出员工都属于哪些部门
    public static void test3() {
        emps.stream()
                .map(e -> e.getDept().getName())
                .distinct()
                .forEach(System.out::println);

    }

    //输出最高工资的员工信息
    public static void test4() {
        /*emps.stream()
                .sorted((e1, e2) -> e2.getSalary().compareTo(e1.getSalary()))
                .limit(1)
                .forEach(System.out::println);*/
        Emp emp = emps.stream()
                .min((e1, e2) -> (int) (e2.getSalary() - e1.getSalary()))
                .get();
        System.out.println("编号:" + emp.getId() + "姓名:" + emp.getName() + ",工资:" + emp.getSalary() + ",所属部门:" + emp.getDept().getName());
    }

    //5.输出最低工资的员工信息
    public static void test5() {
       /* emps.stream()
                .sorted((e1, e2) -> e1.getSalary().compareTo(e2.getSalary()))
                .limit(1)
                .forEach(System.out::println);*/
        Emp emp = emps.stream()
                .min((e1, e2) -> (int) (e1.getSalary() - e2.getSalary()))
                .get();
        System.out.println("编号:" + emp.getId() + "姓名:" + emp.getName() + ",工资:" + emp.getSalary() + ",所属部门:" + emp.getDept().getName());
    }

    //6.输出员工的平均工资
    public static void test6() {
       /* Optional<Double> reduce = emps.stream()
                .map(e -> e.getSalary())
                .reduce(Double::sum);
        System.out.println("员工平均工资:"+reduce.get()/emps.size());*/
        // 获取所有员工工资的总和
        Double sumSalary = emps.stream()
                .map(e -> e.getSalary())
                .reduce(Double::sum)
                .get();
        // 获取员工人数
        long count = emps.stream().count();
        System.out.println("平均工资:" + sumSalary / count);
    }

    //7.在每一个员工姓名前加前缀itany_
    public static void test7() {
        emps.stream()
                .map(e -> "itany_" + e.getName())
                .forEach(System.out::println);
    }
}
